1時間プログラミング 002 標準入力に与えられた文字列について、ランダムに行を選択して出力する
#1時間プログラミング
概要
標準入力に与えられた文字列について、ランダムに行を選択して出力するコマンド
使い方
code:terminal
$ seq 1 10 | choose
6
$ seq 1 10 | choose -n 2
5
2
実装
標準入力の内容を行で区切って配列にして、ランダムにシャッフルした後、先頭から$ N要素取得して出力する
……なのだが、choose_multiple()を使用すれば終わり
コードを一部抜粋
code:choose.rs
#derive(StructOpt)
struct Opt {
#structopt(help = "Number of rows to select", short, default_value = "1")
n: usize,
}
fn main() -> Result<()> {
let opt = Opt::from_args();
let n = opt.n;
if n == 0 {
return Err(anyhow!("illegal row count"));
}
let reader = BufReader::new(io::stdin());
let lines: Vec<String> = reader.lines().map(|l| l.unwrap()).collect();
let mut rng = rand::thread_rng();
let res = lines.choose_multiple(&mut rng, n);
for l in res {
println!("{}", l);
}
Ok(())
}
感想
15分くらいで終わった
rand crateは便利
タイトルが長い